
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

/**
 * AUTO-GENERATED FILE. DO NOT MODIFY.
 */

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
import { trim, isArray, each, reduce } from 'zrender/lib/core/util.js';
import { retrieveVisualColorForTooltipMarker, createTooltipMarkup } from './tooltipMarkup.js';
import { retrieveRawValue } from '../../data/helper/dataProvider.js';
import { isNameSpecified } from '../../util/model.js';
export function defaultSeriesFormatTooltip(opt) {
	var series = opt.series;
	var dataIndex = opt.dataIndex;
	var multipleSeries = opt.multipleSeries;
	var data = series.getData();
	var tooltipDims = data.mapDimensionsAll('defaultedTooltip');
	var tooltipDimLen = tooltipDims.length;
	var value = series.getRawValue(dataIndex);
	var isValueArr = isArray(value);
	var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex); // Complicated rule for pretty tooltip.

	var inlineValue;
	var inlineValueType;
	var subBlocks;
	var sortParam;

	if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) {
		var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor);
		inlineValue = formatArrResult.inlineValues;
		inlineValueType = formatArrResult.inlineValueTypes;
		subBlocks = formatArrResult.blocks; // Only support tooltip sort by the first inline value. It's enough in most cases.

		sortParam = formatArrResult.inlineValues[0];
	} else if (tooltipDimLen) {
		var dimInfo = data.getDimensionInfo(tooltipDims[0]);
		sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]);
		inlineValueType = dimInfo.type;
	} else {
		sortParam = inlineValue = isValueArr ? value[0] : value;
	} // Do not show generated series name. It might not be readable.

	var seriesNameSpecified = isNameSpecified(series);
	var seriesName = seriesNameSpecified && series.name || '';
	var itemName = data.getName(dataIndex);
	var inlineName = multipleSeries ? seriesName : itemName;
	return createTooltipMarkup('section', {
		header: seriesName,
		// When series name is not specified, do not show a header line with only '-'.
		// This case always happens in tooltip.trigger: 'item'.
		noHeader: multipleSeries || !seriesNameSpecified,
		sortParam: sortParam,
		blocks: [createTooltipMarkup('nameValue', {
			markerType: 'item',
			markerColor: markerColor,
			// Do not mix display seriesName and itemName in one tooltip,
			// which might confuses users.
			name: inlineName,
			// name dimension might be auto assigned, where the name might
			// be not readable. So we check trim here.
			noName: !trim(inlineName),
			value: inlineValue,
			valueType: inlineValueType
		})].concat(subBlocks || [])
	});
}

function formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) {
	// check: category-no-encode-has-axis-data in dataset.html
	var data = series.getData();
	var isValueMultipleLine = reduce(value, function (isValueMultipleLine, val, idx) {
		var dimItem = data.getDimensionInfo(idx);
		return isValueMultipleLine = isValueMultipleLine || dimItem && dimItem.tooltip !== false && dimItem.displayName != null;
	}, false);
	var inlineValues = [];
	var inlineValueTypes = [];
	var blocks = [];
	tooltipDims.length ? each(tooltipDims, function (dim) {
		setEachItem(retrieveRawValue(data, dataIndex, dim), dim);
	}) // By default, all dims is used on tooltip.
		: each(value, setEachItem);

	function setEachItem(val, dim) {
		var dimInfo = data.getDimensionInfo(dim); // If `dimInfo.tooltip` is not set, show tooltip.

		if (!dimInfo || dimInfo.otherDims.tooltip === false) {
			return;
		}

		if (isValueMultipleLine) {
			blocks.push(createTooltipMarkup('nameValue', {
				markerType: 'subItem',
				markerColor: colorStr,
				name: dimInfo.displayName,
				value: val,
				valueType: dimInfo.type
			}));
		} else {
			inlineValues.push(val);
			inlineValueTypes.push(dimInfo.type);
		}
	}

	return {
		inlineValues: inlineValues,
		inlineValueTypes: inlineValueTypes,
		blocks: blocks
	};
}